package datastructure.stack;

import java.util.Random;

public class CompareStack {
    public static double stackTime(MyStack<Integer> stack, int loopCount) {
        long startTime = System.nanoTime();// 纳秒计算
        Random random = new Random();
        // 这里是入队操作,和出队操作,将进行对列和循环对列时间复杂度的比较
        for (int i = 0; i < loopCount; i++) {
            int value = random.nextInt(Integer.MAX_VALUE);
            stack.push(value);
        }
        // 出队
        for (int i = 0; i < loopCount; i++) {
            stack.pop();
        }
        long endTime = System.nanoTime();

        return (endTime - startTime) / 1000000000.0;
    }

    public static void main(String[] args) {

        // 定义测试数据量
        int loopCount = 400000;

        MyArrayStack<Integer> arrayStack = new MyArrayStack<>();
        double time = stackTime(arrayStack, loopCount);
        System.out.println("ArrayStack:" + time + "s");

        LinkedListStack<Integer> linkedListStack = new LinkedListStack<>();
        double time2 = stackTime(linkedListStack, loopCount);
        System.out.println("linkedListStack:" + time2 + "s");

        // 这里需要注意的是:
        /**
         * 无论是数组实现还是链表实现的栈时间复杂度都是O(1)级别的,但是array实现的需要一直动态的扩容,
         * 而链表实现的需要一直new开辟空间,具体差异就在链表需要开辟空间,当数据足够大的时候,应该是array比较快.
         */
    }

}
